﻿/**
 * @file guild_module_deleter.hpp
 * @date 2021/05/11 21:13
 *
 * @author harrybao (harrybao@123u.com)
 *
 * @brief 公会模块删除
 *
 * @version v1.0.0
 *
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 *
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author <th>Description
 * <tr><td>2021/05/11 21:13         <td>1.0.0       <td>harrybao
 * <td>创建初始版本
 * </table>
 */

// #ifndef GUILD_MODULE_DELETER_HPP
// #define GUILD_MODULE_DELETER_HPP

#pragma once

#include <cassert>
#include <sstream>

#include "guild/module/guild_module.h"
#include "log/service_logger.hpp"
#include "pool/service_data_pool_op.hpp"
#include "redis/service_redis_fwd.hpp"
#include "guild/guild.h"
#include "guild/guild_redis_key_def.h"


namespace guild_service {
namespace detail {

/**
 * @brief 同步删除公会
 *
 * @param service_name 公会服务名
 * @param guild_id 公会id
 * @return true 删除成功
 * @return false 删除失败
 */
inline static bool DeleteGuild(const std::string &service_name,
                               const guild_id_type guild_id) {
  std::stringstream ss;
  ss << kRedisUnlinkOp
     << kGuildKeyPrefix << guild_id;

  auto ret = redis_command_co(service_name, ss.str(), kRedisCommonTimeOut);
  if (!ret) {
    LOG_FAIL("redis处理失败 命令:%s", ss.str().c_str());
    return false;
  }

  if (!ret->is_success()) {
    LOG_FAIL("redis处理失败 命令:(%s) 错误:%s 错误码:%u", ss.str().c_str(),
             ret->get_error().c_str(),
             static_cast<uint32_t>(ret->get_error_code()));
    return false;
  }

  LOG_DEBUG("redis同步删除公会成功 命令:(%s)", ss.str().c_str());

  return true;
}

/**
 * @brief 同步删除公会模块
 *
 * @tparam Serializer 序列化处理类模板
 * @param service_name 公会服务名
 * @param guild_id 公会id
 * @return true 删除成功
 * @return false 删除失败
 */
static bool DeleteGuildModule(const std::string &service_name,
                              const guild_id_type guild_id,
                              const std::string &module_name) {
  std::stringstream ss;
  ss << kRedisHDelOp
     << kGuildKeyPrefix << guild_id << " " << module_name;

  auto ret = redis_command_co(service_name, ss.str(), kRedisCommonTimeOut);
  if (!ret) {
    LOG_FAIL("redis处理失败 命令:%s", ss.str().c_str());
    return false;
  }

  if (!ret->is_success()) {
    LOG_FAIL("redis处理失败 命令:%s 错误:%s 错误码:%u", ss.str().c_str(),
             ret->get_error().c_str(),
             static_cast<uint32_t>(ret->get_error_code()));
    return false;
  }

  LOG_DEBUG("redis同步删除公会模块成功 命令:%s", ss.str().c_str());

  return true;
}

/**
 * @brief 异步删除公会模块
 *
 * @tparam Serializer 序列化处理类模板
 * @param service_name 公会服务名
 * @param guild_id 公会id
 * @param handler redis执行回调函数
 * @return true 保存成功
 * @return false 保存失败
 */
/*
static bool DeleteGuildModuleAsync(const std::string &service_name,
                                   const guild_id_type guild_id,
                                   const std::string &module_name,
                                   const redis_handler_type &handler) {
}
*/

}  // namespace detail
}  // namespace guild_service

// #endif  // GUILD_MODULE_DELETER_HPP